package org.example.struct.array;

/**
 * @author liyishan
 * @date 2023/8/3 10:23
 * @apiNote
 */

public class Test00605CanPlaceFlowers {
    public static void main(String[] args) {
        int[] nums = {1, 0, 0, 0, 1};
        boolean res = test(nums,2);
        System.out.println(res);
    }

    public static boolean test(int[] flowerbed, int n) {
        if(flowerbed.length == 1){
            if(flowerbed[0] == 0){
                return n<=1;
            }else{
                return n<=0;
            }
        }
        for(int i = 0 ;i<flowerbed.length;i++){
            if(i == 0 && flowerbed[i] == 0 && flowerbed[i+1] == 0){
                n--;
                flowerbed[i] = 1;
            }
            if(i == flowerbed.length-1 && flowerbed[i] == 0  && flowerbed[i-1] == 0 ){
                n--;
                flowerbed[i] = 1;
            }
            if(i != 0 && i != flowerbed.length-1 && flowerbed[i] == 0 && flowerbed[i-1] == 0 && flowerbed[i+1] == 0){
                n--;
                flowerbed[i] = 1;
            }
        }
        return n <= 0;
    }

    /**
     *  1 0 0 0 或者 0 0 0 1  这种单侧有1的  花盆数目 = 0的个数/2
     *  0 0 0   全部是0     花盆数目 = 0的个数+1 /2
     *  1 0 0 1  这种两侧都有1的  花盆数目 = 0的个数-1/2
     * @param flowerbed
     * @param n
     * @return
     */
    public static boolean test1(int[] flowerbed, int n) {
        int count = 0;
        int m = flowerbed.length;
        int prev = -1;
        for (int i = 0; i < m; i++) {
            if (flowerbed[i] == 1) {
                //第一个为1 的  能种植的数量为 i/2
                //后续的每一段  上一个1 和这一个1 之间的区间中能种植的数量为  i-prev-2/2
                if (prev < 0) {
                    count += i / 2;
                } else {
                    count += (i - prev - 2) / 2;
                }
                prev = i;
            }
        }
        //prev  是最后一个1的位置  如果<0 说明没有1
        if (prev < 0) {
            count += (m + 1) / 2;
        } else {
            count += (m - prev - 1) / 2;
        }
        return count >= n;
    }


}
